package br.mg.bhe.ftpobre.command;

import java.io.IOException;
import java.util.logging.Level;

import org.apache.commons.net.ftp.FTPSClient;

import br.mg.bhe.ftpobre.Main;
import br.mg.bhe.ftpobre.gui.MainFrame;
import br.mg.bhe.ftpobre.gui.fs.CreateFolderFrame;
import br.mg.bhe.ftpobre.log.FtpLogView;
import br.mg.bhe.ftpobre.util.LogUtil;

/***
 * 
 * @author Aureliano
 */
public class CreateFolderRemoteCommand implements ICommand {

	@Override
	public void execute() {
		if (this.canExecute()) {
			this.doAction();
		}
	}

	@Override
	public boolean canExecute() {
		return Main.getConnectionData().isConnected();
	}

	private void doAction() {
		String candidateFolderPath = MainFrame.getInstance().getAbsolutePathFromRemoteFilePath() +
				"/" + CreateFolderFrame.getCandidateFolderName();
		FTPSClient ftp = (FTPSClient) Main.getConnectionData().getFtpClient();
		
		try {
			FtpLogView.log("Criando pasta '" + candidateFolderPath + "' no Servidor FTP");
			
			if (ftp.makeDirectory(candidateFolderPath)) {
				FtpLogView.log("Pasta '" + candidateFolderPath + "' criada com sucesso!");
			} else {
				FtpLogView.log("Pasta '" + candidateFolderPath + "' não pôde ser criada no Servidor FTP. Tente novamente mais tarde.");
			}
			
			CommandFactory.command(RefreshRemoteFilesViewCommand.class).execute();
		} catch (IOException ex) {
			LogUtil.getLogger(getClass()).log(Level.SEVERE, ex.getMessage(), ex);
			FtpLogView.log("Não foi possível fazer upload de arquivo para Servidor FTP. Detalhe: " + ex.getMessage());
			throw new RuntimeException(ex);
		}
	}
}